package com.developer.persistence.modulo.indicadores;


import java.util.List;


import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;

import com.developer.core.utils.SimpleLogger;
import com.developer.mybatis.DBManager;
import com.developer.persistence.modulo.indicadores.mapper.dao.HistoricoIndicadorMapper;
import com.developer.persistence.modulo.indicadores.mapper.dao.ListasHistoricoIndicadorMapper;
import com.developer.persistence.modulo.indicadores.mapper.dto.HistoricoIndicador;
import com.developer.persistence.modulo.indicadores.mapper.dto.HistoricoIndicadorKey;
import com.developer.persistence.modulo.indicadores.mapper.dto.ListaHistoricoIndicador;
import com.developer.web.general.Constantes;

public class ControllerHistoricoVr {

	private static ControllerHistoricoVr instance = null;

	public static ControllerHistoricoVr getInstance() {

		if (instance == null) {
			return new ControllerHistoricoVr();
		}
		return instance;
	}

	public Integer contarValorIndicadores(HistoricoIndicador historicoIndicador) {

		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			HistoricoIndicadorMapper historicoIndicadorMapper = session
					.getMapper(HistoricoIndicadorMapper.class);
			if (historicoIndicador != null) {
				historicoIndicador = (HistoricoIndicador) historicoIndicador.clone();
			}
			

			return historicoIndicadorMapper.contarIndicadores(historicoIndicador);

		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}
		return null;

	}

	/**
	 * 
	 * @param indicador
	 * @param rowBounds
	 *            primer registro, cantidad
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<HistoricoIndicador> buscarHistoricoIndicadores(HistoricoIndicador historicoIndicador,
			RowBounds rowBounds) {

		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			// IndicadorMapper indicadorMapper =
			// session.getMapper(IndicadorMapper.class);
			if (historicoIndicador != null) {
				historicoIndicador = (HistoricoIndicador) historicoIndicador.clone();
			}
			
			return session.selectList(HistoricoIndicadorMapper.class.getCanonicalName()
					+ ".buscarIndicadores", historicoIndicador, rowBounds);

			// return indicadorMapper.buscarIndicadores(indicador, rowBounds);

		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}

		return null;

	}

	
	public Boolean guardarHistoricoIndicador(HistoricoIndicador historicoIndicador) {

		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			HistoricoIndicadorMapper historicoIndicadorMapper = session.getMapper(HistoricoIndicadorMapper.class);

			HistoricoIndicador selectByPrimaryKey = historicoIndicadorMapper.selectByPrimaryKey(historicoIndicador);
			
			Integer guardados = 0;
			
			if (selectByPrimaryKey == null) {
				
				historicoIndicador.setEmp_codigo(Constantes.EMP_CODIGO);
				guardados = historicoIndicadorMapper.insertSelective(historicoIndicador);
			
			} else {
				guardados = historicoIndicadorMapper.updateByPrimaryKeySelective(historicoIndicador);
			}

			return guardados > 0;

		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}

		return false;

	}

	public Boolean actualizarHistoricoIndicador(HistoricoIndicador historicoIndicador) {

		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			HistoricoIndicadorMapper historicoIndicadorMapper = session
					.getMapper(HistoricoIndicadorMapper.class);

			Integer guardados = historicoIndicadorMapper.updateByPrimaryKey(historicoIndicador);

			return guardados > 0;

		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}

		return false;

	}

	public HistoricoIndicador obtenerHistoricoIndicador(HistoricoIndicadorKey historicoIndicadorKey) {

		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			HistoricoIndicadorMapper historicoIndicadorMapper = session
					.getMapper(HistoricoIndicadorMapper.class);

		return historicoIndicadorMapper.selectByPrimaryKey(historicoIndicadorKey);



		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}

		return null;

	}

	public Boolean borrarHistoricoIndicador(HistoricoIndicadorKey historicoIndicadorKey) {

		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			HistoricoIndicadorMapper historicoIndicadorMapper = session
					.getMapper(HistoricoIndicadorMapper.class);

			HistoricoIndicador historicoIndicador = new HistoricoIndicador();
			Integer guardados = historicoIndicadorMapper.updateByPrimaryKeySelective(historicoIndicador);

			return guardados > 0;

		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}

		return false;

	}

	

	public List<ListaHistoricoIndicador> obtenerHistoIndicadores() {
		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			ListasHistoricoIndicadorMapper listasHistoricoIndicadorMapper = session
					.getMapper(ListasHistoricoIndicadorMapper.class);
			return listasHistoricoIndicadorMapper.obtenerIndicadores();

		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}
		return null;

	}

/*		public List<ListaIndicador> obtenerListaAcumula() {
		List<ListaIndicador> lista = new ArrayList<ListaIndicador>();
		lista.add(new ListaIndicador("U", "Último valor"));
		lista.add(new ListaIndicador("P", "Promedio"));
		lista.add(new ListaIndicador("A", "Acumulado"));
		return lista;
	}
	
	public List<HistoricoIndicador> obtenerHistorialIndicador(HistoricoIndicador example){

		SqlSession session = DBManager.openSessionAutoCommit();
		try {
			HistoricoIndicadorMapper historicoIndicadorMapper = session.getMapper(HistoricoIndicadorMapper.class);

			 return historicoIndicadorMapper.obtenerHistoricoIndicador(example);

		} catch (Exception e) {
			SimpleLogger.error(e.getMessage(), e);
		} finally {
			session.close();

		}

		return null;

	}*/

}
